/**
 * 日期时间工具函数
 * 提供统一的日期格式化功能
 */

/**
 * 格式化时间为年月日时分格式
 * @param date 日期对象，默认为当前时间
 * @returns 格式化后的时间字符串，如：2024年01月15日 14:30
 */
export const formatDateTime = (date: Date = new Date()): string => {
  return `${date.getFullYear()}年${(date.getMonth() + 1).toString().padStart(2, '0')}月${date.getDate().toString().padStart(2, '0')}日 ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`
}

/**
 * 格式化日期为中文格式
 * @param date 日期对象，默认为当前时间
 * @returns 格式化后的日期字符串，如：2024/1/15
 */
export const formatDate = (date: Date = new Date()): string => {
  return date.toLocaleDateString('zh-CN')
}

/**
 * 格式化完整的日期时间为中文格式
 * @param date 日期对象，默认为当前时间
 * @returns 格式化后的日期时间字符串，如：2024/1/15 14:30:25
 */
export const formatFullDateTime = (date: Date = new Date()): string => {
  return date.toLocaleString('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  })
}

/**
 * 格式化时间戳为可读格式
 * @param timestamp 时间戳（毫秒）
 * @returns 格式化后的时间字符串
 */
export const formatTimestamp = (timestamp: number): string => {
  return formatDateTime(new Date(timestamp))
}

/**
 * 获取相对时间描述
 * @param date 日期对象
 * @returns 相对时间描述，如：刚刚、5分钟前、1小时前等
 */
export const getRelativeTime = (date: Date): string => {
  const now = new Date()
  const diff = now.getTime() - date.getTime()
  const seconds = Math.floor(diff / 1000)
  const minutes = Math.floor(seconds / 60)
  const hours = Math.floor(minutes / 60)
  const days = Math.floor(hours / 24)

  if (seconds < 60) {
    return '刚刚'
  } else if (minutes < 60) {
    return `${minutes}分钟前`
  } else if (hours < 24) {
    return `${hours}小时前`
  } else if (days < 7) {
    return `${days}天前`
  } else {
    return formatDate(date)
  }
}

/**
 * 检查日期是否为今天
 * @param date 日期对象
 * @returns 是否为今天
 */
export const isToday = (date: Date): boolean => {
  const today = new Date()
  return date.toDateString() === today.toDateString()
}

/**
 * 检查日期是否为昨天
 * @param date 日期对象
 * @returns 是否为昨天
 */
export const isYesterday = (date: Date): boolean => {
  const yesterday = new Date()
  yesterday.setDate(yesterday.getDate() - 1)
  return date.toDateString() === yesterday.toDateString()
}